package com.example.printscreen.printscreen.network;

import com.example.printscreen.printscreen.bean.BindStatus;
import com.example.printscreen.printscreen.bean.DetailData;
import com.example.printscreen.printscreen.bean.ErrorData;
import com.example.printscreen.printscreen.bean.FeedItem;
import com.example.printscreen.printscreen.bean.GetImageData;
import com.example.printscreen.printscreen.bean.HomeBanner;
import com.example.printscreen.printscreen.bean.LoginInfo;
import com.example.printscreen.printscreen.bean.MissionData;
import com.example.printscreen.printscreen.bean.ShareItem;
import com.example.printscreen.printscreen.bean.TagItem;
import com.example.printscreen.printscreen.bean.TupaiError;
import com.example.printscreen.printscreen.bean.TupaiMsg;
import com.example.printscreen.printscreen.bean.TupaiUser;
import com.example.printscreen.printscreen.bean.UploadData;
import com.example.printscreen.printscreen.bean.UploadFile;
import com.google.gson.JsonObject;

import org.w3c.dom.Comment;

import java.util.List;
import java.util.Map;

import retrofit2.http.DELETE;
import retrofit2.http.GET;
import retrofit2.http.PATCH;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Path;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;
import rx.Observable;

/**
 * API 接口
 *
 * @author: xiaoluo
 * @date: 2017-02-28 10:12
 */
public interface TupaiService {
    /**
     *  登录
     */
    @POST("/v1/devices")
    Observable<BaseResponse<LoginInfo>> loginAPI(@Query("code") String code, @Query("name") String name,
                                                 @Query("beg_time") String begTime, @Query("end_time") String endTime,
                                                 @Query("round") String roundTime,
                                                 @Query("url") String url);

    /**
     *  轮询当前状态
     */
    @GET("/v1/devices?")
    Observable<BaseResponse<LoginInfo>> getHandleStatus(@Query("code") String code);

    /**
     *  获取处理的图片
     */
    @GET("/v1/uploads/{code}")
    Observable<BaseResponse<GetImageData>> getHandleImageAPI(@Path("code") String code);

    /**
     *  上传图片
     */
    @POST("/v1/uploads")
    Observable<BaseResponse<UploadData>> uploadImageAPI(@Query("code") String code, @Query("pic") String pic);


    /**
     * 获取普通用户数据
     */
    @GET("/v3/user/{uid}")
    Observable<BaseResponse<TupaiUser>> getUserDataAPI(@Path("uid") int uid);

    /**
     * 获取登录用户数据
     */
    @GET("/v3/user")
    Observable<BaseResponse<TupaiUser>> getLoginUserDataAPI();

    /**
     * 检查手机号是否注册
     */
    @GET("/v3/account/exist")
    Observable<BaseResponse<JsonObject>> checkPhoneRegisterAPI(@Query("mobile") String phone);

    /**
     * 手机号登录
     */
    @POST("/v3/account/login")
    Observable<BaseResponse<TupaiUser>> phoneLoginAPI(@Query("mobile") String phone,
                                                      @Query("password") String password);

    /**
     * 获取短信验证码
     */
    @GET("/v3/account/mobileVerifyCode")
    Observable<BaseResponse> getVerifyCodeAPI(@Query("mobile") String phone);

    /**
     * 注册
     */
    @POST("/v3/account/register")
    Observable<BaseResponse<ErrorData>> phoneRegisterAPI(@Query("mobile") String mobile,
                                                         @Query("password") String password,
                                                         @Query("verify_code") String code);

    /**
     * 重置密码
     */
    @POST("/v3/account/resetpass")
    Observable<BaseResponse> resetPasswdAPI(@Query("mobile") String phone,
                                            @Query("verify_code") String code,
                                            @Query("password") String password);

    /**
     * 获取上传token
     */
    @GET("/v1/uploads/token")
    Observable<BaseResponse<UploadFile>> getUploadTokenAPI();

    /**
     * 上传验证
     */
    @PUT("/v3/upload/{id}")
    Observable<BaseResponse<UploadFile>> checkUploadAPI(@Path("id") int id);

    /**
     * module
     */
    @GET("/v3/post/{type}")
    Observable<BaseResponse<List<FeedItem>>> getModulelistAPI(@Path("type") String type,
                                                              @Query("page") int page,
                                                              @Query("size") int size);

    /**
     * 获取首页标签列表
     */
    @GET("/v3/tag")
    Observable<BaseResponse<List<TagItem>>> getHomeTagListAPI(@Query("page") int page,
                                                              @Query("size") int size);

    /**
     * 动态列表
     */
    @GET("/v3/feed")
    Observable<BaseResponse<List<FeedItem>>> getFeedListAPI(@Query("page") int page,
                                                            @Query("size") int size);

    /**
     * 标签详情列表
     */
    @GET("/v3/tag/{id}")
    Observable<BaseResponse<List<FeedItem>>> getTagDetailListAPI(@Path("id") int id,
                                                                 @Query("type") String type,
                                                                 @Query("page") int page,
                                                                 @Query("size") int size);

    /**
     * 动态详情列表
     */
    @GET("/v3/post/{id}")
    Observable<BaseResponse<DetailData>> getFeedDetailListAPI(@Path("id") int id,
                                                              @Query("page") int page,
                                                              @Query("size") int ize);

    /**
     * 点赞一条动态
     */
    @POST("/v3/like")
    Observable<BaseResponse> likeFeedAPI(@Query("post_id") int id);

    /**
     * 添加到进行中
     */
    @POST("v3/mission")
    Observable<BaseResponse> createMissionAPI(@Query("post_id") int id);

    /**
     * 进行中列表
     */
    @GET("v3/mission")
    Observable<BaseResponse<List<MissionData>>> getMissionListAPI(@Query("type") String type,
                                                                  @Query("page") int page,
                                                                  @Query("size") int size);

    /**
     * 上传作品(马上P图)
     */
    @POST("v3/post")
    Observable<BaseResponse<FeedItem>> createReplyNowAPI(@Query("type") String type,
                                                         @Query("desc") String desc,
                                                         @Query("upload_id") List<Integer> uploadIds,
                                                         @Query("tag") List<String> tags,
                                                         @Query("parent_id") int parentd,
                                                         @QueryMap Map<String, String> locaiton);

    /**
     * 上传作品
     */
    @PATCH("/v3/mission/{id}")
    Observable<BaseResponse<FeedItem>> uploadReplyDataAPI(@Path("id") int id,
                                                          @Query("type") String type,
                                                          @Query("desc") String desc,
                                                          @Query("upload_id") List<Integer> uploadIds,
                                                          @Query("tag") List<String> tags,
                                                          @QueryMap Map<String, String> locaiton);

    /**
     * 搜索标签
     */
    @GET("/v3/tag/search")
    Observable<BaseResponse<List<TagItem>>> searchTagAPI(@Query("text") String text,
                                                         @Query("page") int page,
                                                         @Query("size") int size);

    /**
     * 搜索用户
     */
    @GET("/v3/user/search")
    Observable<BaseResponse<List<TupaiUser>>> searchUserAPI(@Query("nickname") String nickname,
                                                            @Query("page") int page,
                                                            @Query("size") int size);

    /**
     * 关注粉丝列表
     */
    @GET("/v3/follow/{type}")
    Observable<BaseResponse<List<TupaiUser>>> getFollowListAPI(@Path("type") String type,
                                                               @QueryMap Map<String, Integer> map);

    /**
     * 关注接口
     */
    @POST("/v3/follow")
    Observable<BaseResponse> createFollowAPI(@Query("target_uid") int uid);

    /**
     * 取消关注
     */
    @DELETE("/v3/follow/{uid}")
    Observable<BaseResponse> deleteFollowAPI(@Path("uid") int uid);

    /**
     * 评论列表
     */
    @GET("/v3/comment")
    Observable<BaseResponse<List<Comment>>> getCommentListAPI(@Query("post_id") int postId,
                                                              @Query("page") int page,
                                                              @Query("size") int size);

    /**
     * 发送评论
     */
    @POST("/v3/comment")
    Observable<BaseResponse<Comment>> sendCommentAPI(@Query("content") String content,
                                                     @Query("post_id") int postId,
                                                     @Query("parent_comment_id") Integer parentId);

    /**
     * 个人主页求P
     */
    @GET("/v3/post/myask")
    Observable<BaseResponse<List<FeedItem>>> getAskListAPI(@Query("target_uid") int uid,
                                                           @Query("page") int page,
                                                           @Query("size") int size);

    /**
     * 个人主页作品
     */
    @GET("/v3/post/myreply")
    Observable<BaseResponse<List<FeedItem>>> getReplyListAPI(@Query("target_uid") int uid,
                                                             @Query("page") int page,
                                                             @Query("size") int size);

    /**
     * 消息
     */
    @GET("/v3/message")
    Observable<BaseResponse<List<TupaiMsg>>> getMessageAPI(@Query("page") int page,
                                                           @Query("size") int size);

    /**
     * 删除评论
     */
    @DELETE("/v3/comment/{id}")
    Observable<BaseResponse<Comment>> deleteCommentAPI(@Path("id") int id);

    /**
     * 删除动态
     */
    @DELETE("/v3/post/{id}")
    Observable<BaseResponse<FeedItem>> deleteFeedAPI(@Path("id") int id);

    /**
     * 修改密码
     */
    @PATCH("/v3/user/password")
    Observable<BaseResponse> revisePasswordAPI(@Query("password") String old_pw,
                                               @Query("new_password") String new_pw);

    /**
     * 修改个人资料
     */
    @PATCH("/v3/user/info")
    Observable<BaseResponse<List<TupaiError>>> reviseProfileAPI(@QueryMap Map<String, String> map);

    /**
     * 首页banner
     */
    @GET("/v3/banner")
    Observable<BaseResponse<List<HomeBanner>>> getHomeBannerAPI();

    /**
     * 反馈
     */
    @POST("/v3/feedback")
    Observable<BaseResponse> feedbackAPI(@Query("content") String content);

    /**
     * 举报
     */
    @POST("/v3/report")
    Observable<BaseResponse> reportAPI(@Query("target_type") String type,
                                       @Query("target_id") int id,
                                       @Query("desc") String content);

    @GET("/v3/im/token")
    Observable<BaseResponse<String>> getIMtokenAPI();

    /**
     * 分享数据
     */
    @GET("/v3/post/share")
    Observable<BaseResponse<ShareItem>> getShareDataAPI(@Query("post_id") int id);

    /**
     * 三方登录
     */
    @POST("/v3/oauth/login/access_token")
    Observable<BaseResponse<TupaiUser>> oauthLoginAPI(@Query("access_token") String accessToken,
                                                      @Query("open_id") String openId,
                                                      @Query("platform") String platform);

    /**
     * 三方绑定
     */
    @POST("/v3/oauth/bind/access_token")
    Observable<BaseResponse> bindAPI(@Query("access_token") String accessToken,
                                     @Query("open_id") String openId,
                                     @Query("platform") String platform);

    /**
     * 取消绑定
     */
    @DELETE("/v3/oauth/bind")
    Observable<BaseResponse> deleteBindAPI(@Query("platform") String platform);

    /**
     * 获取绑定状态
     */
    @GET("/v3/oauth/status")
    Observable<BaseResponse<BindStatus>> getBindStatusAPI();

}
